UI组件用于像搭积木一样的构建React Native应用。React Native用户交互界面声明的控件(这些控件可能是嵌套的)会和原生平台系统的原生控件相对应。React Native有一系列的常用应用使用的核心组件,通过该组件或者组件相互嵌套可以构建新的组件。
在React Native中最基本的控件是Text组件,该Text组件渲染简单的文本。最简单的就是在设备中显示字符串"Hello"
import React from 'react';
import { AppRegistry, Text } from 'react-native';
const App = () => {
return (
<Text>Hello World!</Text>
);
}
// App registration and rendering
AppRegistry.registerComponent('MyApp', () => App);
React Native中另外一个基础组件为Image组件,和Text相似,该Image组件用来渲染一个图片。该Image组件网页中的img标签类似。Image组件最简单的使用方法就是使用source属性提供一个图片文件的地址即可。下面一个现实checkbox图片的简单实例:
import React from 'react';
import { AppRegistry, Image } from 'react-native';
const App = () => {
return (
<Image source={require('./img/check.png')} />
);
}
// App registration and rendering
AppRegistry.registerComponent('MyApp', () => App);
View组件是React Native应用最最基础的空间了,该View控件和目标原生平台顶层视图是等价的,例如在iOS平台的UIView。该View组件和网页中的div标签类似。当然没有View包裹的基础组件例如:Text和Image也是可以显示的,但是这种的方法一般不推荐,因为我们可以使用View组件进行控制这些组件的样式和布局。
接下来的例子我们创建一个View视图,然后让字符串"Hello"在设备的顶层中间显示。有时候我们仅仅使用Text组件是无法达到这样的效果(外层没有加View组件的Text组件会布局显示在一个固定的位置上面)。
import React from 'react';
import { AppRegistry, Text, View } from 'react-native';
const App = () => {
return (
<View style={{alignItems: 'center'}}>
<Text>Hello!</Text>
</View>
);
}
// App registration and rendering
AppRegistry.registerComponent('MyApp', () => App);
用户输入是所需应用的基础,例如写一篇文章或者评论就是一个例子。TextInput组件就是一个最基础允许用户输入的组件。下面的例子就是创建一个简单的TextInput,当用户没有输入的时候默认显示字符串'Hello'
import React, { AppRegistry, TextInput, View } from 'react-native'
const App = () => {
return (
<View>
<TextInput placeholder="Hello" />
</View>
);
}
// App registration and rendering
AppRegistry.registerComponent('MyApp', () => App);
在手机设备中,列表是许多应用程序的核心元素。ListView是一个View的特殊类型组件用于显示垂直滚动变化的数据。ListView组件需要两个属性:dataSource和renderRow。dataSource表示列表部分的所有需要展现的信息数据,renderRow将数据显示一个被渲染的组件中。
这边的例子创建一个简单的显示写死的数据的ListView。首先初始化用于填充列表的数据源,然后使用这些数据渲染ListView。
[注意].在使用ListView的时候需要使用rowHasChanged方法,该方法可以判断如果当前行和之前的有没有发生变化。
import React from 'react';
import { AppRegistry, Text, View, ListView} from 'react-native';
var SimpleList = React.createClass({
// Initialize the hardcoded data
getInitialState: function() {
var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
return {
dataSource: ds.cloneWithRows(['John', 'Joel', 'James', 'Jimmy', 'Jackson', 'Jillian', 'Julie'])
};
},
render: function() {
return (
<View>
<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
</View>
);
}
});
// App registration and rendering
AppRegistry.registerComponent('MyApp', () => SimpleList);
[全文完]